package com.smart.community.property.service;

import com.smart.community.property.dto.FeeDuplicateCheckResult;
import com.smart.community.commons.exception.BusinessException;

/**
 * 费用重复检查服务接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
public interface FeeDuplicateCheckService {

    /**
     * 检查物业费重复
     * 
     * @param communityId 社区ID
     * @param billingPeriod 计费周期
     * @param feeType 费用类型
     * @return 重复检查结果
     */
    FeeDuplicateCheckResult checkPropertyFeeDuplicate(Long communityId, String billingPeriod, Integer feeType);

    /**
     * 检查卫生费重复
     * 
     * @param communityId 社区ID
     * @param billingPeriod 计费周期
     * @return 重复检查结果
     */
    FeeDuplicateCheckResult checkSanitationFeeDuplicate(Long communityId, String billingPeriod);

    /**
     * 检查房户费用重复
     * 
     * @param householdId 房户ID
     * @param billingPeriod 计费周期
     * @param feeType 费用类型 (1-物业费, 5-卫生费)
     * @return 重复检查结果
     */
    FeeDuplicateCheckResult checkHouseholdFeeDuplicate(Long householdId, String billingPeriod, Integer feeType);

    /**
     * 验证物业费生成参数
     * 
     * @param communityId 社区ID
     * @param billingPeriod 计费周期
     * @param feeType 费用类型
     * @throws BusinessException 如果存在重复
     */
    void validatePropertyFeeGeneration(Long communityId, String billingPeriod, Integer feeType);

    /**
     * 验证卫生费生成参数
     * 
     * @param communityId 社区ID
     * @param billingPeriod 计费周期
     * @throws BusinessException 如果存在重复
     */
    void validateSanitationFeeGeneration(Long communityId, String billingPeriod);
}
